cocos creator资源加密解密插件

您所在的位置:网站首页 cocos jsc解密函数 cocos creator资源加密解密插件

cocos creator资源加密解密插件

2024-01-28 07:19| 来源: 网络整理| 查看: 265

cocos creator2.4.5有效 支持对web平台和native平台进行加密,支持对文件名进行混淆。 如图 在这里插入图片描述

代码列表 : 在这里插入图片描述

web端 加密思路:不破坏原有工程,构建后修改导出的cocos2d-js.js文件,主要是修改有三点,解密代码放在downloadArrayBuffer,修改downloadText和downloadImage,改为通过downloadArrayBuffer先下载二进制流再解密解码为文本或图片。

var downloadArrayBuffer = function downloadArrayBuffer(url, options, onComplete) { options.responseType = "arraybuffer"; url = _getRealPath(url) downloadFile(url, options, options.onFileProgress, function (err,data) { if(!err){ ///解密 data = MainEnc._decriptTool.decodeArrayBuffer(data); } onComplete&&onComplete(err,data) }); }

如上,主要是downloadArrayBuffer进行解密,另一个要注意的就是下载图片要手动转化一下。

加密解密使用的xxtea,代码如下:

encodeArrayBuffer(arrbuf, sign = this.encriptSign, key = this.encriptKey) { Editor.log("11"); Editor.log(arrbuf); Editor.log("22"); if (this.checkIsEncripted(arrbuf, sign)) { return } let buffer = new Uint8Array(arrbuf); let bufferStr = this.Uint8ArrayToString(buffer); let enbufferStr = XXTEA.encryptToBase64(bufferStr, sign); let enBuffer = this.stringToUint8Array(enbufferStr); let signBuf = new Uint8Array(this.strToBytes(sign)); Editor.log("11"); Editor.log(signBuf); Editor.log("12"); let _outBuffer = new ArrayBuffer(signBuf.length + enBuffer.length); let outBuffer = new Uint8Array(_outBuffer); for (let i = 0; i < signBuf.length; i++) { outBuffer[i] = signBuf[i] } for (let i = 0; i < enBuffer.length; i++) { outBuffer[signBuf.length + i] = enBuffer[i] } Editor.log(outBuffer); return outBuffer; } decodeArrayBuffer(arrbuf, sign = this.encriptSign, key = this.encriptKey) { if (!this.checkIsEncripted(arrbuf, sign)) { return arrbuf; } let signBuf = new Uint8Array(this.strToBytes(sign)); let buffer = new Uint8Array(arrbuf); let size = buffer.length - signBuf.length; let _outArrBuf = new ArrayBuffer(size) let outBuffer = new Uint8Array(_outArrBuf) for (let i = 0; i < size; i++) { outBuffer[i] = buffer[signBuf.length + i]; } let enArrBufStr = this.Uint8ArrayToString(outBuffer); let deArrBufStr=XXTEA.decryptFromBase64(enArrBufStr,sign); let outBuffer2=this.stringToUint8Array(deArrBufStr); return outBuffer2; }

至于文件名混淆,就是对源uuid格式的文件名和一个混淆签名再次进行md5,得到新文件名。 如aaaa-bbbb-cccc-dddd.png变为1111-2222-3333-4444.png 关键是工程中如何识别新文件名。项目运行时,查找文件是根据文件路径查到uuid再组装成url的,我们只需要在url组装后,再按照我们的混淆规则,再算一次就好了,保险起见,只混淆uuid格式的文件名。native模式下,修改jsb-engine.js的transformUrl,对本地url进行再次转换;web模式下,downloadArrayBuffer里直接在下载之前将url转换成混淆后的文件名。

需要的可以加群聊一起讨论: 在这里插入图片描述

参考链接:https://www.jianshu.com/p/43ad9b4a4eb5



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3